<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use DB;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class SortController extends Controller
{
	/**
	 * 获取表中所有数据
	 */
	public static function getAllSort($stute)
	{
		return DB::table('sort')->where('stute',$stute)->get();
	}

	/**
	 * 递归遍历数据 */
	public static function getSortArr($sort,$parent)
	{
		$data = [];
		foreach ($sort as $key => $value) {
			if($value->parent == $parent){
				$value->sub = self::getSortArr($sort,$value->sorid);
				$data[] = $value;
			}
		}
		return $data;
	}

	/**
	 * 递归查询所有分类
	 */	
	public function getSortByParent($parent)
	{
		$res = DB::table('sort')->where('parent',$parent)->get();
		$data = [];
		foreach ($res as $key => $value) {
			$value->sub = $this->getSortByParent($value->sorid);
			$data[] = $value;
		}
		return $res;
	}

	/**
	 * 获取所有的子分类  按照sql排序
	 */

	public static function getSorts()
	{
		$res = DB::table('sort')
		->select(DB::raw(' *,concat(path,",",sorid) as paths'))
		->orderBy('paths')
		->get();
		//层级显示分类名称
		foreach($res as $k => $v){
			$tmp = explode(',',$v->path);
			$len = count($tmp)-1;
			//修改分类的名称
			$v->sorname = str_repeat('|----',$len).$v->sorname;
		}

		return $res;
	}


    /**
     * 分类 添加
     * admin/sort/add
     */
    public function getAdd()
    {
    	//查询所有的类
    	// $res = DB::table('sort')->get();
    	$res = $this->getSorts();
    	//显示模板
    	return view('sort.add',['sort'=>$res]);
    }

    /**
     * 接受表单数据 进行插入操作
     * admin/sort/insert POST
     */
    public function postInsert(Request $request)
    {
    	//手动数据验证
    	// if(empty($request->input('sorname'))){
    	// 	return back()->with('info','类名不能为空');
    	// }


    	// laravel提供的表单验证
    	$this->validate($request,['sorname' => 'required'],['sorname.required' => '类名不能为空']);

    	//获取添加的分类名称
    	$data = $request->only(['sorname','parent','stute']);
    	//拼接路径
    	$parent = $request->input('parent');
    	if($parent == 0){
    		$data['path'] = 0;
    	}else{
    		$info = DB::table('sort')->where('sorid',$parent)->first();
    		$data['path'] = $info->path.','.$info->sorid;
    	}
    	//将获取的数据插入到sort数据库
    	$res = DB::table('sort')->insert($data);
    	//判断数据插入是否成功
    	if($res){
    		//成功 重定向到分类列表页 index
    		return redirect('admin/sort/index')->with('success','数据添加成功');
    	}else{
    		//失败 回到添加页
    		return back()->with('error','数据插入失败');
    	}
    }

    /**
	 * 后台分类管理页
	 * admin/sort/index
	 */
	public function getIndex(Request $request)
	{
		//递归查询数据库 进行分类处理(多查询)
		// $data = $this->getSortByParent(0); 

		//递归查询数据库 进行分类处理(单查询)
		// $all = $this->getAllSort();
		// $res = $this->getSortArr($all,0);
		// dd($res);

		//判断是否有keywords搜索条件
		// if(empty($request->input('keywords'))){
		// 	//查询数据 并且分页
		// 	$sort = DB::table('sort')
		// 	->paginate($request->input('num',10));
		// }else{
		// 	//查询数据 并且分页
		// 	$sort = DB::table('sort')
		// 	->where('sorname','like','%'.$request->input('keywords').'%')
		// 	->paginate($request->input('num',10));
		// }
		// 查询数据 并且分页
		// $sort = DB::table('sort')
		// ->where(function($query)use($request){
		// 	$query->where('sorname','like','%'.$request->input('keywords').'%');
		// })
		// ->paginate($request->input('num',10));

		$sort = $this->getSorts();

		//显示模板
		return view('sort.index',['sort'=>$sort,'request'=>$request->all()]);
	}


	/**
	 * 删除操作
	 */
	public function getDelete($sorid)
	{
		//判断是否有子类
		$data = DB::table('sort')->where('parent',$sorid)->count();
		if($data > 0 )
		{
			return back()->with('error','该分类下有子类,不允许删除');
		}else{
			$res = DB::table('sort')->where('sorid',$sorid)->delete();
		}
		if($res){
			//成功 重定向 页面跳转到列表页
			return redirect('admin/sort/index')->with('success','数据删除成功');
		}else{
			//失败 回到列表页
			return back()->with('error','数据删除失败');
		}

	}

	/**
	 * 修改操作
	 */
	public function getEdit($sorid)
	{
		//查询所有的类
    	$res = $this->getSorts();
    	//查询当前要修改的类
		$sort = DB::table('sort')->where('sorid',$sorid)->first();
		//显示模板 分配变量
		return view('sort.edit',['sort'=>$sort,'res'=>$res]);	
	}

	/**
	 * 修改操作 到数据库
	 */
	public function postUpdate(Request $request)
	{
		$sorid = $request->input('sorid');
		$parent = $request->input('parent');
		$data = $request->only(['sorname','parent','stute']);
		//根据sorid查询原数据
		$info = DB::table('sort')->where('sorid',$sorid)->first();
		//判断
		if($info->parent != $parent){
			//要修改分类 就要查询 如果还有子分类 就不能修改
			$res = DB::table('sort')->where('parent',$sorid)->count();
			if($res > 0){
				//有子类 不能修改 
				return back()->with('error','该分类下有子类,不允许修改分类');
			}
		}
		//拼接路径
    	if($parent == 0){
    		$data['path'] = 0;
    	}else{
    		$info = DB::table('sort')->where('sorid',$parent)->first();
    		$data['path'] = $info->path.','.$info->sorid;
    	}
		//可以修改
		$res = DB::table('sort')->where('sorid',$sorid)->update($data);
		//判断
		if($res){
			//成功 重定向 页面跳转到列表页
			return redirect('admin/sort/index')->with('success','数据修改成功');
		}else{
			//失败 回到列表页
			return back()->with('error','数据修改失败');
		}

	}
}
